package com.danbay.cloud.deviceaccess.api.constants;

/**
 *
 * @author SJG
 *  2017/11/12
 * 中控推送消息的类型
 */
public enum MessageType {
    /**
     * 错误
     */
    NONE(-1,"错误类型"),
    /**
     * 云端通知中控搜索设备
     */
    ALLOW(0,"允许入网"),
    /**
     * 包括中控和设备注册
     */
    REG(1,"注册"),
    /**
     * 包括中控和设备登录
     */
    LOGIN(2,"登录"),
    /**
     * 设备登出
     */
    LOGOUT(3,"登出"),
    /**
     * 中控心跳
     */
    HEARTBEAT(4,"心跳"),
    /**
     * 由云端发送取实抄数据命令触发
     */
    REAL_DATA(5,"实抄数据"),
    /**
     * 由云端发送取冻结数据命令触发
     */
    FREEZE_DATA(6,"冻结数据"),
    /**
     * 中控主动定时上报的设备读数
     */
    DATA_REPORT(7,"数据上报"),
    /**
     * 服务端通知中控重新发起某个命令
     */
    RETRY(90,"重试"),
    /**
     * 消息推送给云端后处理的结果
     */
    RESULT(91,"结果反馈");

    private final int value;
    private final String phrase;

    MessageType(int value, String phrase){
        this.value = value;
        this.phrase = phrase;
    }

    public int value(){
        return value;
    }

    public static String getPhrase(int value){
        for(MessageType deviceType : values()){
            if(deviceType.value == value){
                return deviceType.phrase;
            }
        }
        return "错误类型";
    }

    /**
     * 转换为为类型枚举
     * @param type 消息类型值
     * @return 消息类型枚举
     */
    public static MessageType parse(int type){
        switch (type){
            case 0:
                return MessageType.ALLOW;
            case 1:
                return MessageType.REG;
            case 2:
                return MessageType.LOGIN;
            case 3:
                return MessageType.LOGOUT;
            case 4:
                return MessageType.HEARTBEAT;
            case 5:
                return MessageType.REAL_DATA;
            case 6:
                return MessageType.FREEZE_DATA;
            case 7:
                return MessageType.DATA_REPORT;
            case 90:
                return MessageType.RETRY;
            case 91:
                return MessageType.RESULT;
            default:
                return MessageType.NONE;
        }
    }

}